package com.myKng.search.service;

import com.myKng.search.model.KnowledgeDocument;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Map;

/**
 * 搜索服务接口
 * 定义搜索相关的业务逻辑
 */
public interface SearchService {

    /**
     * 根据关键词搜索知识文档
     *
     * @param keyword  关键词
     * @param pageable 分页参数
     * @return 分页搜索结果
     */
    Page<KnowledgeDocument> searchByKeyword(String keyword, Pageable pageable);

    /**
     * 高级搜索
     *
     * @param params   搜索参数
     * @param pageable 分页参数
     * @return 分页搜索结果
     */
    Page<KnowledgeDocument> advancedSearch(Map<String, Object> params, Pageable pageable);

    /**
     * 根据文件类型搜索
     *
     * @param fileType 文件类型
     * @param pageable 分页参数
     * @return 分页搜索结果
     */
    Page<KnowledgeDocument> searchByFileType(String fileType, Pageable pageable);

    /**
     * 根据标签搜索
     *
     * @param tag      标签
     * @param pageable 分页参数
     * @return 分页搜索结果
     */
    Page<KnowledgeDocument> searchByTag(String tag, Pageable pageable);

    /**
     * 获取搜索建议
     *
     * @param prefix 前缀
     * @param limit  限制数量
     * @return 建议列表
     */
    List<String> getSuggestions(String prefix, int limit);

    /**
     * 获取相关推荐
     *
     * @param documentId 文档ID
     * @param limit      限制数量
     * @return 推荐文档列表
     */
    List<KnowledgeDocument> getRelatedDocuments(String documentId, int limit);

    /**
     * 索引文档
     *
     * @param document 知识文档
     * @return 索引后的文档
     */
    KnowledgeDocument indexDocument(KnowledgeDocument document);

    /**
     * 批量索引文档
     *
     * @param documents 知识文档列表
     * @return 索引后的文档列表
     */
    List<KnowledgeDocument> indexDocuments(List<KnowledgeDocument> documents);

    /**
     * 删除文档索引
     *
     * @param documentId 文档ID
     */
    void deleteDocument(String documentId);

    /**
     * 更新文档索引
     *
     * @param document 知识文档
     * @return 更新后的文档
     */
    KnowledgeDocument updateDocument(KnowledgeDocument document);
}